{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/wangdong/anaconda2/lib/python2.7/site-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n",
      "  from ._conv import register_converters as _register_converters\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "from tensorflow.examples.tutorials.mnist import input_data\n",
    "from matplotlib import pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "tf.logging.set_verbosity(tf.logging.INFO)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From <ipython-input-2-55e2a785fcc3>:1: read_data_sets (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
      "WARNING:tensorflow:From /home/wangdong/anaconda2/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:260: maybe_download (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please write your own downloading logic.\n",
      "WARNING:tensorflow:From /home/wangdong/anaconda2/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:262: extract_images (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting ./train-images-idx3-ubyte.gz\n",
      "WARNING:tensorflow:From /home/wangdong/anaconda2/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:267: extract_labels (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting ./train-labels-idx1-ubyte.gz\n",
      "Extracting ./t10k-images-idx3-ubyte.gz\n",
      "Extracting ./t10k-labels-idx1-ubyte.gz\n",
      "WARNING:tensorflow:From /home/wangdong/anaconda2/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:290: __init__ (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
      "(55000, 784)\n",
      "(55000,)\n",
      "(5000, 784)\n",
      "(5000,)\n",
      "(10000, 784)\n",
      "(10000,)\n"
     ]
    }
   ],
   "source": [
    "mnist = input_data.read_data_sets('./')\n",
    "\n",
    "print(mnist.train.images.shape)\n",
    "print(mnist.train.labels.shape)\n",
    "\n",
    "print(mnist.validation.images.shape)\n",
    "print(mnist.validation.labels.shape)\n",
    "\n",
    "print(mnist.test.images.shape)\n",
    "print(mnist.test.labels.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8,8))\n",
    "\n",
    "for idx in range(16):\n",
    "    plt.subplot(4,4, idx+1)\n",
    "    plt.axis('off')\n",
    "    plt.title('[{}]'.format(mnist.train.labels[idx]))\n",
    "    plt.imshow(mnist.train.images[idx].reshape((28,28)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = tf.placeholder(\"float\", [None, 784])\n",
    "y = tf.placeholder(\"int64\", [None])\n",
    "learning_rate = tf.placeholder(\"float\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "def initialize(shape, stddev = 0.1):\n",
    "    return tf.truncated_normal(shape, stddev = 0.1)\n",
    "\n",
    "L1_units_count = 100\n",
    "\n",
    "W_1 = tf.Variable(initialize([784, L1_units_count]))\n",
    "b_1 = tf.Variable(initialize([L1_units_count]))\n",
    "logits_1 = tf.matmul(x, W_1) + b_1\n",
    "output_1 = tf.nn.relu(logits_1)\n",
    "\n",
    "L2_units_count = 50\n",
    "\n",
    "W_2 = tf.Variable(initialize([L1_units_count, L2_units_count]))\n",
    "b_2 = tf.Variable(initialize([L2_units_count]))\n",
    "logits_2 = tf.matmul(output_1, W_2) + b_2\n",
    "output_2 = tf.nn.relu(logits_2)\n",
    "\n",
    "L3_units_count = 10\n",
    "\n",
    "W_3 = tf.Variable(initialize([L2_units_count, L3_units_count]))\n",
    "b_3 = tf.Variable(initialize([L3_units_count]))\n",
    "logits_3 = tf.matmul(output_2, W_3) + b_3\n",
    "\n",
    "logits = logits_3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "cross_entropy_loss = tf.reduce_mean(\n",
    "     tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=y))\n",
    "\n",
    "optimizer = tf.train.GradientDescentOptimizer(\n",
    "     learning_rate = learning_rate).minimize(cross_entropy_loss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "pred = tf.nn.softmax(logits)\n",
    "correct_pred = tf.equal(tf.argmax(pred, 1), y)\n",
    "accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "batch_size = 32\n",
    "training_step = 10000\n",
    "\n",
    "saver = tf.train.Saver()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "after 500 training steps, the loss is 0.106318, the validation accuracyis 0.9396\n",
      "after 1000 training steps, the loss is 0.160337, the validation accuracyis 0.947\n",
      "after 1500 training steps, the loss is 0.0394774, the validation accuracyis 0.9582\n",
      "after 2000 training steps, the loss is 0.0566062, the validation accuracyis 0.964\n",
      "after 2500 training steps, the loss is 0.0747786, the validation accuracyis 0.961\n",
      "after 3000 training steps, the loss is 0.181175, the validation accuracyis 0.9704\n",
      "after 3500 training steps, the loss is 0.0158177, the validation accuracyis 0.9712\n",
      "after 4000 training steps, the loss is 0.0847181, the validation accuracyis 0.9688\n",
      "after 4500 training steps, the loss is 0.00747013, the validation accuracyis 0.9738\n",
      "after 5000 training steps, the loss is 0.0607823, the validation accuracyis 0.969\n",
      "after 5500 training steps, the loss is 0.0297155, the validation accuracyis 0.9728\n",
      "after 6000 training steps, the loss is 0.0255307, the validation accuracyis 0.9772\n",
      "after 6500 training steps, the loss is 0.0203926, the validation accuracyis 0.974\n",
      "after 7000 training steps, the loss is 0.0794436, the validation accuracyis 0.9732\n",
      "after 7500 training steps, the loss is 0.0320814, the validation accuracyis 0.9754\n",
      "after 8000 training steps, the loss is 0.0700913, the validation accuracyis 0.9676\n",
      "after 8500 training steps, the loss is 0.0663469, the validation accuracyis 0.976\n",
      "after 9000 training steps, the loss is 0.277239, the validation accuracyis 0.9722\n",
      "after 9500 training steps, the loss is 0.00195963, the validation accuracyis 0.9768\n",
      "the training is finish!\n",
      "('the test accuracy is:', 0.9712)\n"
     ]
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    sess.run(tf.global_variables_initializer())\n",
    "    \n",
    "    #定义验证集与测试集\n",
    "    validate_data = {\n",
    "        x: mnist.validation.images,\n",
    "        y: mnist.validation.labels,\n",
    "    }\n",
    "    test_data = {x: mnist.test.images, y: mnist.test.labels}\n",
    "    \n",
    "    for i in range(training_step):\n",
    "        xs, ys = mnist.train.next_batch(batch_size)\n",
    "        _, loss = sess.run(\n",
    "           [optimizer, cross_entropy_loss],\n",
    "           feed_dict={\n",
    "               x: xs,\n",
    "               y: ys,\n",
    "               learning_rate: 0.2\n",
    "           })\n",
    "        \n",
    "        #每100次训练打印一次损失值与验证准确率\n",
    "        if i>0 and i%500 == 0:\n",
    "            validate_accuracy = sess.run(accuracy, feed_dict = validate_data)\n",
    "            print(\"after %d training steps, the loss is %g, the validation accuracy\"\n",
    "                  \"is %g\" %(i, loss, validate_accuracy))\n",
    "            saver.save(sess, './model.ckpt', global_step=i)\n",
    "            \n",
    "    print(\"the training is finish!\")\n",
    "    #最终的测试准确率\n",
    "    acc = sess.run(accuracy, feed_dict = test_data)\n",
    "    print(\"the test accuracy is:\", acc)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Restoring parameters from ./model.ckpt-9500\n",
      "1.0\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    ckpt = tf.train.get_checkpoint_state('./')\n",
    "    if ckpt and ckpt.model_checkpoint_path:\n",
    "        saver.restore(sess, ckpt.model_checkpoint_path)\n",
    "        final_pred, acc = sess.run(\n",
    "            [pred, accuracy],\n",
    "            feed_dict = {\n",
    "                x: mnist.test.images[:16],\n",
    "                y: mnist.test.labels[:16]\n",
    "            })\n",
    "        orders = np.argsort(final_pred)\n",
    "        plt.figure(figsize=(8,8))\n",
    "        print(acc)\n",
    "        for idx in range(16):\n",
    "            order = orders[idx, :][-1]\n",
    "            prob = final_pred[idx, :][order]\n",
    "            plt.subplot(4, 4, idx+1 )\n",
    "            plt.axis('off')\n",
    "            plt.title('{}: [{}]-[{: .1f}%]'.format(mnist.test.labels[idx], order, prob*100))\n",
    "            plt.imshow(mnist.test.images[idx].reshape((28,28)))\n",
    "    else:\n",
    "        pass"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.15"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
